class Solution:
    """
    字符串有三种编辑操作: 插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串，编写一个函数判定它们是否只需要一次(或者零次)编辑。
    """

    def oneEditAway(self, first: str, second: str) -> bool:
        """
        比较两个字符串，判断它们是否只需要一次或零次编辑。

        如果两个字符串的长度之差大于 1，则返回 False。
        如果两个字符串的长度相等，则计算它们的不同字符数，如果不同字符数大于 1，则返回 False。
        否则，调用 getOneEditAway 函数，判断较长的字符串是否可以通过一次编辑操作转换为较短的字符串。

        Args:
            first: 第一个字符串。
            second: 第二个字符串。

        Returns:
            如果两个字符串只需要一次或零次编辑，则返回 True，否则返回 False。
        """
        if abs(len(first) - len(second)) > 1:
            return False
        if len(first) == len(second):
            num = 0
            for i in range(len(first)):
                if first[i] != second[i]:
                    num += 1
                    if num > 1:
                        return False
        else:
            return self.getOneEditAway(first, second) \
                if len(first) - len(second) == 1 else self.getOneEditAway(second, first)
        return True

    def getOneEditAway(self, bigger: str, smaller: str) -> bool:
        """
        判断较长的字符串是否可以通过一次编辑操作转换为较短的字符串。

        遍历较短的字符串的每个字符，如果字符与较长的字符串的对应字符不同，则将较短字符串的剩余字符与较长的字符串的剩余字符比较，如果剩余字符相等，则返回 True。

        Args:
            bigger: 较长的字符串。
            smaller: 较短的字符串。

        Returns:
            如果较长的字符串可以通过一次编辑操作转换为较短的字符串，则返回 True，否则返回 False。
        """
        for i in range(len(smaller)):
            if smaller[i] != bigger[i]:
                str1 = smaller[i:]
                str2 = bigger[i+1:]
                return str1 == str2
        return True

        # s = list(bigger)
        # for i in range(len(smaller)):
        #     if not s.__contains__(smaller[i]):
        #         return False
        #     else:
        #         s.remove(smaller[i])
        # return True


if __name__ == '__main__':
    s = Solution()
    print(s.oneEditAway("", "d"))
    print(s.oneEditAway("tea", "deta"))
    print(s.oneEditAway("dea", "deta"))
    print(s.oneEditAway("pale", "palxe"))
    print(s.oneEditAway("pale", "pace"))
    print(s.oneEditAway("pale", "pavce"))
